document.addEventListener('DOMContentLoaded', () => {
    const meterNeedle = document.getElementById('meter-needle'); // 获取电平表指针元素
    const knobImg = document.getElementById('knob-img'); // 获取旋钮图像元素

    // 更新指针角度
    function updateNeedle(angle) {
        meterNeedle.style.transform = `rotate(${angle}deg)`;
    }

    // 生成随机数（范围在-50到50之间）
    function generateRandomNumber() {
        return Math.floor(Math.random() * 100) - 50;
    }

    // 定时生成随机数并更新指针角度
    setInterval(() => {
        const randomNumber = generateRandomNumber();
        const angle = mapNumber(randomNumber, -50, 50, -90, 90); // 将随机数映射为指针角度
        // updateNeedle(angle);
    }, 1000);

    let isDragging = false; // 是否正在拖动
    let startAngle = 0; // 初始角度
    let startX, startY; // 初始鼠标位置

    // 鼠标按下事件处理
    knobImg.addEventListener('mousedown', (event) => {
        isDragging = true;
        startX = event.clientX;
        startY = event.clientY;
        const transform = window.getComputedStyle(knobImg).transform;
        if (transform !== 'none') {
            const values = transform.split('(')[1].split(')')[0].split(',');
            const a = values[0];
            const b = values[1];
            startAngle = Math.round(Math.atan2(b, a) * (180 / Math.PI));
        } else {
            startAngle = 0;
        }
        event.preventDefault(); // 阻止默认行为
    });

    // 鼠标移动事件处理
    document.addEventListener('mousemove', (event) => {
        if (isDragging) {
            const deltaX = event.clientX - startX;
            const deltaY = event.clientY - startY;
            const angle = startAngle + deltaX; // 根据鼠标移动计算旋转角度
            knobImg.style.transform = `rotate(${angle}deg)`; // 更新旋钮角度
            const needleAngle = mapNumber(angle, -90, 90, -45, 45); // 将旋钮角度映射为指针角度
            updateNeedle(needleAngle); // 更新指针角度
        }
    });

    // 鼠标松开事件处理
    document.addEventListener('mouseup', () => {
        isDragging = false; // 停止拖动
    });

    // 将数值从一个范围映射到另一个范围
    function mapNumber(value, inMin, inMax, outMin, outMax) {
        return (value - inMin) * (outMax - outMin) / (inMax - inMin) + outMin;
    }
});
